↳ Prolog
↳ PrologToPiTRSProof
flat_in_ga(niltree, nil) → flat_out_ga(niltree, nil)
flat_in_ga(tree(X, niltree, XS), cons(X, YS)) → U1_ga(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
right_in_ga(tree(X, XS1, XS2), XS2) → right_out_ga(tree(X, XS1, XS2), XS2)
U1_ga(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → U2_ga(X, XS, YS, flat_in_ga(ZS, YS))
flat_in_ga(tree(X, tree(Y, YS1, YS2), XS), ZS) → U3_ga(X, Y, YS1, YS2, XS, ZS, flat_in_ga(tree(Y, YS1, tree(X, YS2, XS)), ZS))
U3_ga(X, Y, YS1, YS2, XS, ZS, flat_out_ga(tree(Y, YS1, tree(X, YS2, XS)), ZS)) → flat_out_ga(tree(X, tree(Y, YS1, YS2), XS), ZS)
U2_ga(X, XS, YS, flat_out_ga(ZS, YS)) → flat_out_ga(tree(X, niltree, XS), cons(X, YS))
Infinitary Constructor Rewriting Termination of PiTRS implies Termination of Prolog
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
flat_in_ga(niltree, nil) → flat_out_ga(niltree, nil)
flat_in_ga(tree(X, niltree, XS), cons(X, YS)) → U1_ga(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
right_in_ga(tree(X, XS1, XS2), XS2) → right_out_ga(tree(X, XS1, XS2), XS2)
U1_ga(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → U2_ga(X, XS, YS, flat_in_ga(ZS, YS))
flat_in_ga(tree(X, tree(Y, YS1, YS2), XS), ZS) → U3_ga(X, Y, YS1, YS2, XS, ZS, flat_in_ga(tree(Y, YS1, tree(X, YS2, XS)), ZS))
U3_ga(X, Y, YS1, YS2, XS, ZS, flat_out_ga(tree(Y, YS1, tree(X, YS2, XS)), ZS)) → flat_out_ga(tree(X, tree(Y, YS1, YS2), XS), ZS)
U2_ga(X, XS, YS, flat_out_ga(ZS, YS)) → flat_out_ga(tree(X, niltree, XS), cons(X, YS))
FLAT_IN_GA(tree(X, niltree, XS), cons(X, YS)) → U1_GA(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
FLAT_IN_GA(tree(X, niltree, XS), cons(X, YS)) → RIGHT_IN_GA(tree(X, niltree, XS), ZS)
U1_GA(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → U2_GA(X, XS, YS, flat_in_ga(ZS, YS))
U1_GA(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → FLAT_IN_GA(ZS, YS)
FLAT_IN_GA(tree(X, tree(Y, YS1, YS2), XS), ZS) → U3_GA(X, Y, YS1, YS2, XS, ZS, flat_in_ga(tree(Y, YS1, tree(X, YS2, XS)), ZS))
FLAT_IN_GA(tree(X, tree(Y, YS1, YS2), XS), ZS) → FLAT_IN_GA(tree(Y, YS1, tree(X, YS2, XS)), ZS)
flat_in_ga(niltree, nil) → flat_out_ga(niltree, nil)
flat_in_ga(tree(X, niltree, XS), cons(X, YS)) → U1_ga(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
right_in_ga(tree(X, XS1, XS2), XS2) → right_out_ga(tree(X, XS1, XS2), XS2)
U1_ga(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → U2_ga(X, XS, YS, flat_in_ga(ZS, YS))
flat_in_ga(tree(X, tree(Y, YS1, YS2), XS), ZS) → U3_ga(X, Y, YS1, YS2, XS, ZS, flat_in_ga(tree(Y, YS1, tree(X, YS2, XS)), ZS))
U3_ga(X, Y, YS1, YS2, XS, ZS, flat_out_ga(tree(Y, YS1, tree(X, YS2, XS)), ZS)) → flat_out_ga(tree(X, tree(Y, YS1, YS2), XS), ZS)
U2_ga(X, XS, YS, flat_out_ga(ZS, YS)) → flat_out_ga(tree(X, niltree, XS), cons(X, YS))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
FLAT_IN_GA(tree(X, niltree, XS), cons(X, YS)) → U1_GA(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
FLAT_IN_GA(tree(X, niltree, XS), cons(X, YS)) → RIGHT_IN_GA(tree(X, niltree, XS), ZS)
U1_GA(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → U2_GA(X, XS, YS, flat_in_ga(ZS, YS))
U1_GA(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → FLAT_IN_GA(ZS, YS)
FLAT_IN_GA(tree(X, tree(Y, YS1, YS2), XS), ZS) → U3_GA(X, Y, YS1, YS2, XS, ZS, flat_in_ga(tree(Y, YS1, tree(X, YS2, XS)), ZS))
FLAT_IN_GA(tree(X, tree(Y, YS1, YS2), XS), ZS) → FLAT_IN_GA(tree(Y, YS1, tree(X, YS2, XS)), ZS)
flat_in_ga(niltree, nil) → flat_out_ga(niltree, nil)
flat_in_ga(tree(X, niltree, XS), cons(X, YS)) → U1_ga(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
right_in_ga(tree(X, XS1, XS2), XS2) → right_out_ga(tree(X, XS1, XS2), XS2)
U1_ga(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → U2_ga(X, XS, YS, flat_in_ga(ZS, YS))
flat_in_ga(tree(X, tree(Y, YS1, YS2), XS), ZS) → U3_ga(X, Y, YS1, YS2, XS, ZS, flat_in_ga(tree(Y, YS1, tree(X, YS2, XS)), ZS))
U3_ga(X, Y, YS1, YS2, XS, ZS, flat_out_ga(tree(Y, YS1, tree(X, YS2, XS)), ZS)) → flat_out_ga(tree(X, tree(Y, YS1, YS2), XS), ZS)
U2_ga(X, XS, YS, flat_out_ga(ZS, YS)) → flat_out_ga(tree(X, niltree, XS), cons(X, YS))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ PiDP
↳ UsableRulesProof
U1_GA(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → FLAT_IN_GA(ZS, YS)
FLAT_IN_GA(tree(X, tree(Y, YS1, YS2), XS), ZS) → FLAT_IN_GA(tree(Y, YS1, tree(X, YS2, XS)), ZS)
FLAT_IN_GA(tree(X, niltree, XS), cons(X, YS)) → U1_GA(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
flat_in_ga(niltree, nil) → flat_out_ga(niltree, nil)
flat_in_ga(tree(X, niltree, XS), cons(X, YS)) → U1_ga(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
right_in_ga(tree(X, XS1, XS2), XS2) → right_out_ga(tree(X, XS1, XS2), XS2)
U1_ga(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → U2_ga(X, XS, YS, flat_in_ga(ZS, YS))
flat_in_ga(tree(X, tree(Y, YS1, YS2), XS), ZS) → U3_ga(X, Y, YS1, YS2, XS, ZS, flat_in_ga(tree(Y, YS1, tree(X, YS2, XS)), ZS))
U3_ga(X, Y, YS1, YS2, XS, ZS, flat_out_ga(tree(Y, YS1, tree(X, YS2, XS)), ZS)) → flat_out_ga(tree(X, tree(Y, YS1, YS2), XS), ZS)
U2_ga(X, XS, YS, flat_out_ga(ZS, YS)) → flat_out_ga(tree(X, niltree, XS), cons(X, YS))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
U1_GA(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → FLAT_IN_GA(ZS, YS)
FLAT_IN_GA(tree(X, tree(Y, YS1, YS2), XS), ZS) → FLAT_IN_GA(tree(Y, YS1, tree(X, YS2, XS)), ZS)
FLAT_IN_GA(tree(X, niltree, XS), cons(X, YS)) → U1_GA(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
right_in_ga(tree(X, XS1, XS2), XS2) → right_out_ga(tree(X, XS1, XS2), XS2)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ Rewriting
U1_GA(X, right_out_ga(ZS)) → FLAT_IN_GA(ZS)
FLAT_IN_GA(tree(X, niltree, XS)) → U1_GA(X, right_in_ga(tree(X, niltree, XS)))
FLAT_IN_GA(tree(X, tree(Y, YS1, YS2), XS)) → FLAT_IN_GA(tree(Y, YS1, tree(X, YS2, XS)))
right_in_ga(tree(X, XS1, XS2)) → right_out_ga(XS2)
right_in_ga(x0)
FLAT_IN_GA(tree(X, niltree, XS)) → U1_GA(X, right_out_ga(XS))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ Rewriting
↳ QDP
↳ UsableRulesProof
FLAT_IN_GA(tree(X, niltree, XS)) → U1_GA(X, right_out_ga(XS))
U1_GA(X, right_out_ga(ZS)) → FLAT_IN_GA(ZS)
FLAT_IN_GA(tree(X, tree(Y, YS1, YS2), XS)) → FLAT_IN_GA(tree(Y, YS1, tree(X, YS2, XS)))
right_in_ga(tree(X, XS1, XS2)) → right_out_ga(XS2)
right_in_ga(x0)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ Rewriting
↳ QDP
↳ UsableRulesProof
↳ QDP
↳ QReductionProof
FLAT_IN_GA(tree(X, niltree, XS)) → U1_GA(X, right_out_ga(XS))
U1_GA(X, right_out_ga(ZS)) → FLAT_IN_GA(ZS)
FLAT_IN_GA(tree(X, tree(Y, YS1, YS2), XS)) → FLAT_IN_GA(tree(Y, YS1, tree(X, YS2, XS)))
right_in_ga(x0)
right_in_ga(x0)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ Rewriting
↳ QDP
↳ UsableRulesProof
↳ QDP
↳ QReductionProof
↳ QDP
↳ UsableRulesReductionPairsProof
FLAT_IN_GA(tree(X, niltree, XS)) → U1_GA(X, right_out_ga(XS))
U1_GA(X, right_out_ga(ZS)) → FLAT_IN_GA(ZS)
FLAT_IN_GA(tree(X, tree(Y, YS1, YS2), XS)) → FLAT_IN_GA(tree(Y, YS1, tree(X, YS2, XS)))
No rules are removed from R.
FLAT_IN_GA(tree(X, niltree, XS)) → U1_GA(X, right_out_ga(XS))
U1_GA(X, right_out_ga(ZS)) → FLAT_IN_GA(ZS)
FLAT_IN_GA(tree(X, tree(Y, YS1, YS2), XS)) → FLAT_IN_GA(tree(Y, YS1, tree(X, YS2, XS)))
POL(FLAT_IN_GA(x1)) = 2 + x1
POL(U1_GA(x1, x2)) = 1 + x1 + x2
POL(niltree) = 0
POL(right_out_ga(x1)) = 2 + x1
POL(tree(x1, x2, x3)) = 2 + 2·x1 + 2·x2 + x3
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ Rewriting
↳ QDP
↳ UsableRulesProof
↳ QDP
↳ QReductionProof
↳ QDP
↳ UsableRulesReductionPairsProof
↳ QDP
↳ PisEmptyProof